<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../rurple.css" type="text/css"><title>If, else, if, else, ....</title></head><body>
<h2 class="title">14. <span class="pykeyword">if, else, <small>if,
else,</small></span>...</h2>
<p>Dans l'exercice des haies précédent <small>(vous l'avez essayé, n'est-ce pas ?)</small>
il fallait écrire un <span class="pykeyword">if</span>/<span class="pykeyword">else</span>
à l'intérieur d'un autre, parce que nous voulions donner trois choix à
Reeborg : finir, avancer ou sauter. Vous avez dû remarqué que cela nous
a obligé à indenter de plus en plus le code. Imaginez ce qui se
passerait si nous voulions donner à Reeborg 10 choix mutuellement
exclusifs ; le code deviendrait difficile à lire. Pour nous aider dans
de telles situations, Guido van Rossum, le créateur de Python, a choisi
un mot-clé qui représente la combinaison d'une instruction <span class="pykeyword">else</span> suivie par une clause <span class="pykeyword">if</span>. Ce mot-clé est <span class="pykeyword">elif</span>, que l'on peut considérer comme une sorte d'abréviation de <span class="pykeyword">else if</span>. Avec ce nouveau mot-clé, le code précédent peut être écrit comme ceci&nbsp;:</p>
<pre><span class="keyword">def</span> avancer_sauter_ou_terminer():<br>    <span class="keyword">if</span> on_beeper():<br>        turn_off()<br>    <span class="keyword">elif</span> front_is_clear():<br>        move()<br>    <span class="keyword">else</span>:<br>        sauter_une_haie()<br></pre>
<p>Nous voyons mieux maintenant, puisqu'ils sont indentés de la même façon, qu'il y a trois choix possibles. L'instruction suivant <span class="pykeyword">else</span>
est exécutée seulement si toutes les conditions précédentes sont
fausses ; elle n'a pas de condition associée. Si nous avons plus de
trois choix, tout ce que nous devrons faire est d'ajouter d'autres
instructions <span class="pykeyword">elif</span></p>
<pre><span class="keyword">def</span> avancer_sauter_ou_terminer():<br>    <span class="keyword">if</span> on_beeper():<br>        turn_off()<br>    <span class="keyword">elif</span> front_is_clear():<br>        move()<br>    <span class="keyword">elif</span> right_is_clear(): <span class="comment"># toujours faux</span>
        <span class="keyword">pass</span> <br>    <span class="keyword">else</span>:<br>        sauter_une_haie()<br></pre>
<p>Comme Reeborg suit le mur du bas, <tt>right_is_clear()</tt> est toujours faux, donc l'instruction <span class="pykeyword">pass</span> (qui est l'équivalent en Python de "ne rien faire") est toujours ignorée. Remarquez que si nous avions utilisé <tt>left_is_clear()</tt> à la place, Reeborg serait resté collé sur place pour toujours dès qu'il serait arrivé à la première haie. <b>Essayez-le vous même !</b></p>
<h3 class="try">À votre tour</h3>
<p>Essayez d'écrire un programme en utilisant <span class="pykeyword">if, elif, else</span>
qui fonctionne correctement avec les deux courses de haies précédentes
ainsi qu'avec la suivante (dans le fichier hurdles3.wld) :</p>
<img alt="début haies" src="../../images/intro/hurdles3_start.png">
<center><a href="13-else.htm"><img alt="précédent" src="../../images/previous.png"> Écoute moi... sinon...</a> - <a href="../lessons_toc.htm"><img alt="début" src="../../images/home.png"></a> - <a href="15-not.htm">Pas vrai !? <img alt="suivant" src="../../images/next.png"></a></center>
</body></html>